package com.cms.recursoshumanos.object.list;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.cms.recursoshumanos.object.Contacto;
import com.cms.recursoshumanos.object.ObjectContactoElemento;

public class ListaContactosDirectorio implements Serializable
{
	/**
	 * 
	 */
	private static final long serialVersionUID = -3123773450164808382L;
	List<ObjectContactoElemento> listaContacto;
	
	public ListaContactosDirectorio()
	{
		listaContacto = new ArrayList<ObjectContactoElemento>();
	}
	
	public ObjectContactoElemento getObjectContactoByLetra(String letra)
	{
		ObjectContactoElemento elListado = null;
		for (int i = 0; i < cantElementListaObjectContactoElemento() ; i++)
		{
			ObjectContactoElemento laListaContactoElemento = getListaObjectContactoElementoAtIndex(i);
			if (laListaContactoElemento.getLetra().equals(letra))
			{
				elListado = laListaContactoElemento;
				break;
			}
		}
		return elListado;
	} 
	
	public void deleteContacto(ObjectContactoElemento laListaContacto)
	{
		for (int i = 0 ; i < cantElementListaObjectContactoElemento() ; i++)
		{
			ObjectContactoElemento laListaContactoBusq = getListaObjectContactoElementoAtIndex(i);
			if (laListaContactoBusq.getLetra().equals(laListaContacto.getLetra()))
			{
				deleteListaObjectContactoElementoAtIndex(i);
				break;
			}
		}
	}
	public ListaContacto getListaContactoSinDivisiones()
	{
		ListaContacto listado_regreso = new ListaContacto();
		
		for (int i = 0; i < cantElementListaObjectContactoElemento() ; i++)
		{
			ObjectContactoElemento listado_aux = getListaObjectContactoElementoAtIndex(i);
			for (int j = 0; j < listado_aux.getListadoContacto().cantElementListaContacto() ; j++)
			{
				Contacto elContactoAux = listado_aux.getListadoContacto().getContactoAtIndex(j);
				listado_regreso.addContacto(elContactoAux);
			}
		}
		
		return listado_regreso;
	}
	public int getIndexListaObjectContactoElemento(ObjectContactoElemento laLista)
	{
		return this.listaContacto.indexOf(laLista);
	}
	public int cantElementListaObjectContactoElemento()
	{
		return this.listaContacto.size();
	}
	public void addObjectContactoElemento(ObjectContactoElemento elListado)
	{
		this.listaContacto.add(elListado);	
	}
	public void setListaObjectContactoElemento(ArrayList<ObjectContactoElemento> listaContacto)
	{
		this.listaContacto = listaContacto;
	}
	public List<ObjectContactoElemento> getListaObjectContactoElemento()
	{
		return this.listaContacto;
	}
	public void resetListaObjectContactoElemento()
	{
		listaContacto.clear();
	}
	public void deleteListaObjectContactoElementoAtIndex(int index)
	{
		listaContacto.remove(index);
	}
	public ObjectContactoElemento getListaObjectContactoElementoAtIndex(int index)
	{
		try
		{
			return (ObjectContactoElemento) this.listaContacto.get(index);
		}
		catch (NullPointerException e)
		{
			e.printStackTrace();
			return null;
		}
		catch (IndexOutOfBoundsException e) 
		{
			e.printStackTrace();
			return null;
		}
		catch (Exception e) 
		{
			e.printStackTrace();
			return null;
		}
	}
	public ObjectContactoElemento getListaObjectContactoElementoByLetra(String letra)
	{
		ObjectContactoElemento regreso = null;
		for (int i = 0 ; i < cantElementListaObjectContactoElemento(); i++)
		{
			ObjectContactoElemento aux_object_contacto = getListaObjectContactoElementoAtIndex(i);
			if (aux_object_contacto.getLetra().equals(letra))
			{
				regreso = aux_object_contacto;
				break;
			}
		}
		return regreso;
	}

	public ListaContacto getListaFavorito() 
	{
		ListaContacto listado = new ListaContacto();
		for (int i = 0 ; i < cantElementListaObjectContactoElemento() ; i++)
		{
			ListaContacto aux_lista_contacto = getListaObjectContactoElementoAtIndex(i).getListadoContacto().getListaFavorito();
			
			for (int j = 0 ; j < aux_lista_contacto.cantElementListaContacto() ; j++)
			{
				listado.addContacto(aux_lista_contacto.getContactoAtIndex(j));
			}
		}
		return listado;
	}
	
}

